package talayaco.dao.impl;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import talayaco.dao.AnimalDAO;
import talayaco.resources.connect.SqlMapConfig;
import talayaco.utils.StringUtils;

import com.ibatis.sqlmap.client.SqlMapClient;

public class AnimalDAOImpl implements AnimalDAO {

	private SqlMapClient sqlMapClient = SqlMapConfig.getSqlMap();

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#insertAnimal(java.util.Map)
	 */
	public void insertAnimal(Map<String, Object> datosIngreso) throws Exception {
		sqlMapClient.insert("insertAnimal", datosIngreso);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getAnimalByCaravana(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getAnimalByCaravana(String caravana)
			throws Exception {
		Map<String, String> animal = (Map<String, String>) sqlMapClient
				.queryForObject("getAnimalByCaravana", caravana);
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#existeAnimal(java.lang.String)
	 */
	public String existeAnimal(String caravana) throws Exception {

		String existe = (String) sqlMapClient.queryForObject("existeAnimal",
				caravana);
		return existe;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#existeAnimalByCaravanaAndTipo(java.util.Map)
	 */
	public String existeAnimalByCaravanaAndTipo(
			Map<String, String> datosConsulta) throws Exception {
		String existe = (String) sqlMapClient.queryForObject(
				"existeAnimalByCaravanaAndTipo", datosConsulta);
		return existe;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AnimalDAO#getAnimalParaModificacionByCaravana(java.lang.
	 * String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getAnimalParaModificacionByCaravana(
			String caravana) throws Exception {
		Map<String, String> animal = (Map<String, String>) sqlMapClient
				.queryForObject("getAnimalParaModificacionByCaravana", caravana);
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AnimalDAO#getAnimalParaModificacionByiD(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getAnimalParaModificacionById(String id)
			throws Exception {
		Map<String, String> animal = (Map<String, String>) sqlMapClient
				.queryForObject("getAnimalParaModificacionById", id);
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AnimalDAO#getAnimalesParaModificacionByCorral(java.lang.
	 * String)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getAnimalesParaModificacionByCorral(
			String idCorral) throws Exception {
		List<Map<String, String>> animales = (List<Map<String, String>>) sqlMapClient
				.queryForList("getAnimalesParaModificacionByCorral", idCorral);
		return animales;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateAnimalEgresoByCaravana(java.util.Map)
	 */
	public void updateAnimalEgresoByCaravana(Map<String, Object> datosEgreso)
			throws Exception {
		sqlMapClient.update("updateAnimalEgresoByCaravana", datosEgreso);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AnimalDAO#updateAnimalEgresoByCorralAndTipo(java.util.Map)
	 */
	public void updateAnimalEgresoById(Map<String, Object> datosEgreso)
			throws Exception {
		sqlMapClient.update("updateAnimalEgresoById", datosEgreso);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#cantidadAnimalesByTipoyCorral(java.util.Map)
	 */
	public String cantidadAnimalesByTipoyCorral(
			Map<String, String> datosConsulta) throws Exception {
		return (String) sqlMapClient.queryForObject(
				"cantidadAnimalesByTipoyCorral", datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getAnimalesByTipoSinCorral(java.lang.String)
	 */
	public String getAnimalesByTipoSinCorral(String tipo) throws Exception {
		return (String) sqlMapClient.queryForObject(
				"getAnimalesByTipoSinCorral", tipo);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.CorralDAO#getAnimalByCorralConCaravana(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<String> getAnimalByCorralConCaravana(String idCorral)
			throws Exception {
		List<String> caravanas = (List<String>) sqlMapClient.queryForList(
				"getAnimalByCorralConCaravana", idCorral);

		return caravanas;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.AnimalDAO#getAnimalParaMovimientoByCaravana(java.lang.String
	 * )
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getAnimalParaMovimientoByCaravana(String caravana)
			throws Exception {
		Map<String, String> animal = (Map<String, String>) sqlMapClient
				.queryForObject("getAnimalParaMovimientoByCaravana", caravana);
		return animal;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getIdsAnimales(java.util.Map)
	 */
	@SuppressWarnings("unchecked")
	public List<Long> getIdsAnimales(Map<String, String> datosConsulta)
			throws Exception {
		return (List<Long>) sqlMapClient.queryForList("getIdsAnimales",
				datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateAnimalByCarana(java.lang.String,
	 * java.lang.String, java.lang.String, java.lang.String)
	 */
	public void updateAnimalByCarana(String caravana, String caravanaNueva,
			String tipoAnimal, String observacion) throws Exception {
		Map<String, String> datosUpdate = new HashMap<String, String>();
		datosUpdate.put("caravana", caravana);
		if (StringUtils.isNullOrBlank(caravanaNueva))
			datosUpdate.put("nuevaCaravana", null);
		else
			datosUpdate.put("nuevaCaravana", caravanaNueva);
		datosUpdate.put("tipoAnimal", tipoAnimal);
		datosUpdate.put("observacion", observacion);
		sqlMapClient.update("updateAnimalModificacionByCaravana", datosUpdate);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateAnimalByCorralyTipo(java.lang.String,
	 * java.lang.String, java.lang.String, java.lang.String, java.lang.String)
	 */
	public void updateAnimalByCorralyTipo(String idAnimal, String caravana,
			String tipoAnimalNuevo, String observacion) throws Exception {
		Map<String, String> datosUpdate = new HashMap<String, String>();
		datosUpdate.put("idAnimal", idAnimal);
		datosUpdate.put("tipoAnimal", tipoAnimalNuevo);
		if (StringUtils.isNullOrBlank(caravana))
			datosUpdate.put("caravana", null);
		else
			datosUpdate.put("caravana", caravana);
		datosUpdate.put("observacion", observacion);
		sqlMapClient.update("updateAnimalModificacionById", datosUpdate);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#validarMovimientosProveedor(java.lang.String)
	 */
	public Long validarMovimientosProveedor(String nombreProveedor)
			throws Exception {
		return (Long) sqlMapClient.queryForObject(
				"validarMovimientosProveedor", nombreProveedor);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getDatosReporteAnimal(java.util.Map)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getDatosReporteAnimal(
			Map<String, Object> datosConsulta) throws Exception {
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getDatosReporteAnimal", datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#validarFechaIngresoAnimal(java.lang.String,
	 * java.lang.String)
	 */
	public Date validarFechaIngresoAnimal(String caravana, Date fechaDesde)
			throws Exception {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();
		datosConsulta.put("caravana", caravana);
		datosConsulta.put("fechaDesde", fechaDesde);

		return (Date) sqlMapClient.queryForObject("validarFechaIngresoAnimal",
				datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getCaravanaByCliente(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<String> getCaravanaByProveedor(String idProveedor)
			throws Exception {
		return (List<String>) sqlMapClient.queryForList(
				"getCaravanaByProveedor", idProveedor);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getCaravanaByCliente(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<String> getCaravanaByCliente(String idCliente) throws Exception {
		return (List<String>) sqlMapClient.queryForList("getCaravanaByCliente",
				idCliente);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getDatosValidacion(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getDatosValidacion(String caravana)
			throws Exception {
		return (Map<String, String>) sqlMapClient.queryForObject(
				"getDatosValidacionAnimal", caravana);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getProveedorByCaravana(java.lang.String)
	 */
	public String getClienteByCaravana(String caravana) throws Exception {
		return (String) sqlMapClient.queryForObject("getClienteByCaravana",
				caravana);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#insertRecria(java.util.Map)
	 */
	public void insertRecria(Map<String, Object> datos) throws Exception {
		sqlMapClient.insert("insertRecria", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getDatosReporteRecria(java.util.Map)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getDatosReporteRecria(
			Map<String, Object> datos) throws Exception {
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getDatosReportesRecria", datos);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#existeRelacionCriaMadre(java.lang.String,
	 * java.lang.String)
	 */
	public String existeRelacionCriaMadre(String caravanaMadre,
			String caravanaHija) throws Exception {
		Map<String, String> caravanas = new HashMap<String, String>();
		caravanas.put("caravanaMadre", caravanaMadre);
		caravanas.put("caravanaCria", caravanaHija);
		return (String) sqlMapClient.queryForObject("existeRelacionCriaMadre",
				caravanas);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateRecria(java.util.Map)
	 */
	public void updateRecria(Map<String, Object> datosConsulta)
			throws Exception {

		sqlMapClient.update("updateRecria", datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateRecria(java.util.Map)
	 */
	public void updateRecriaCompleto(Map<String, Object> datosConsulta)
			throws Exception {

		sqlMapClient.update("updateRecriaCompleto", datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateAnimalPesoTysaIngreso(java.util.Map)
	 */
	public void updateAnimalPesoTysaIngreso(Map<String, Object> datosConsulta)
			throws Exception {

		sqlMapClient.update("updateAnimalPesoTysaIngreso", datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#updateAnimalRodeoCria(java.util.Map)
	 */
	public void updateAnimalRodeoCria(Map<String, Object> datosConsulta)
			throws Exception {
		sqlMapClient.update("updateAnimalRodeoCria", datosConsulta);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#saveDiagnostico(java.util.Map)
	 */
	public void saveDiagnostico(Map<String, Object> datosConsulta)
			throws Exception {
		sqlMapClient.insert("saveDiagnostico", datosConsulta);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getRodeoCria(java.lang.String)
	 */
	public String getRodeoCria(String caravana) throws Exception {
		return (String) sqlMapClient.queryForObject("getRodeoCria", caravana);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.AnimalDAO#getCantidadDiagnosticos(java.lang.String)
	 */
	public String getCantidadDiagnosticos(String tipoDiagnostico)
			throws Exception {
		return (String) sqlMapClient.queryForObject("getCantidadDiagnosticos",
				tipoDiagnostico);
	}

	public List<Map<String, String>> getDiagnosticos(String idAnimal)
			throws Exception {
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getDiagnosticos", idAnimal);
	}

}
